\section{Digitalisierung, Verarbeitung und Datentransfer}

Für die Digitalisierung und Verarbeitung der analogen Daten wird ein ''ATMega32'' Mikrocontroller eingesetzt. Dieser ist auf einem ''AVR-NET-IO-Fertigmodul'' untergebracht.

Als Toolchain kommt das Softwarepaket ''WinAVR-20100110'' mit der IDE ''Eclipse'' erweitert durch das ''AVR-Eclipse-Plugin'' zum Einsatz. Diese Toolchain ermöglicht eine strukturierte Softwareentwicklung in der Programmiersprache ''C''.

Zur Übertragung des kompilierten und gelinkten Sourcecode in den Flashspeicher des $\mu$C's wird der USB-Programmer ''AVRISP mkII'' verwendet.

Den Transfer der Daten zur Auswertung an das räumlich getrennte Subsystem übernimmt das Mobiltelefon ''Siemens S45'', welches über die serielle Schnittstelle des ''ATMega32'' verbunden ist.

\subsection[AD-Wandler]{AD-Wandler\footnote{Quelle: http://www.mikrocontroller.net/articles/AD-Wandler}}

Die Abkürzung AD-Wandler steht für einen Analog-Digital-Wandler (teilweise auch ADU, Analog-Digital-Umsetzer; im Englischen ADC Analog-Digital-Converter). Dieser wandelt eine analoge Größe, meist eine Spannung, in einen digitalen Wert um. Das Gegenstück ist der DA-Wandler.

Die Auflösung mit der die analoge Größe gemessen wird bewegt sich zwischen 1 (Komparator) und 24 Bit. Den durch die Wandlung entstehenden Fehler zwischen dem tatsäch- lichen Wert und dem ausgegebenen (gewandelten) Wert nennt man Quantisierungsfehler. Er entsteht durch die unvermeidbare Rundung. Ferner entsteht durch die Nichtlinearität des Bauteils ebenfalls ein Fehler.

Der Wandlungsvorgang benötigt immer eine gewisse Zeit, während der die Eingangsgröße konstant bleiben muss. Das gilt auch für den Flash-ADC, da nicht alle Komparatoren gleich schnell sind. Hierfür werden sogenannte 'Track and Hold' bzw. 'Sample and Hold' Schaltungen verwendet, welche das Eingangssignal "einfrieren" während die AD-Wandlung läuft.

\subsubsection{Verfahren}
\begin{itemize}
\item{Flash- oder Parallel-Wandler verwenden für jeden Ausgangswert einen Komparator. Dadurch sind sie sehr schnell, aber auch teuer und stromhungrig. Flash-Wandler werden unter anderem in Digitalen Oszilloskopen eingesetzt.}
\item{Sukzessive Approximation (SAR): Stufenweise Annäherung, Wägeverfahren. Benö- tigt einen DA-Wandler, mit dem man sich Bit für Bit an die zu messende Spannung herantastet.
\begin{itemize}
\item{Der interne AD-Wandler eines AVR verwendet diese Methode (vgl. Abbildung \ref{fig_adcsukap}).}
\end{itemize}}
\item{Single Slope, Dual Slope Verfahren: Werden meist in Multimetern oder ähnlichen Messgeräten verwendet da sie billig sind, wenig Strom brauchen und gute Linearitäten besitzen. Im Prinzip wird hier die Spannungsmessung über eine Zeitmessung realisiert (Zeitmessung des Auf- und Entladen eines Kondensators).}
\item{Delta Sigma: Vor allem für sehr genaue Messungen (24 Bit). Preisgünstig herstellbar, da nur ein Komparator und Logik-Elemente benötigt werden, dafür recht langsam. Werden vor allem im Audio-Bereich eingesetzt.}
\item{Spannungs-Frequenz-Umsetzer: Hier steuert die Eingangsspannung einen Oszillator, dessen Ausgangsfrequenz möglichst linear von der Eingangsspannung abhängt (Frequenzmodulation).}
\item{Nachlauf-Verfahren: Es wird auch hier ein DAC benötigt, der von einem Auf-Abwärtszähler gesteuert wird. Ein Komparator steuert ob auf- oder abwärts gezählt wird}
\end{itemize}

\begin{figure}[ht]
	\centering
  \includegraphics[width=0.6\textwidth]{Bilder/ADCsukz.jpg}
	\caption[Sukzessive Approximation]{Sukzessive Approximation\footnote{Quelle: http://www.vias.org/mikroelektronik/adc\_succapprox.html}} 
	\label{fig_adcsukap}
\end{figure}

\subsection[AVR Net-IO Bausatz von Pollin]{AVR Net-IO Bausatz von Pollin\footnote{Quelle: http://www.mikrocontroller.net/articles/AVRNet-IO\_Bausatz\_von\_Pollin}}

\subsubsection{Technische Daten}
\begin{itemize}
\item{Betriebsspannung \SI{9}{V} AC/DC}
\item{Stromaufnahme ca. \SI{190}{mA}}
\item{8 digitale Ausgänge (\SI{0}{V}/\SI{5}{V}) [PC0-PC7 an J3]}
\item{4 digitale Eingänge (\SI{0}{V}/\SI{5}{V}) [PA0-PA3 an J3]}
\item{4 ADC-Eingänge (10 Bit) [PA4-PA7 an Schraubklemmen]}
\item{LCD-Anschluss (HD44780 komp. Controller nötig) [PD2-7, PB0, PB3 an EXT]}
\item{ENC28J60}
\item{ATmega32 Mikrocontroller}
\item{Maße (L$\times$B$\times$H): \SI{108}{mm}$\times$\SI{76}{mm}$\times$\SI{22}{mm}}
\end{itemize}

\subsubsection{Hardware}
Die Schaltung des AVR-NET-IO ist recht einfach:
\begin{itemize}
\item Ein ATmega32 Mikrocontroller enthält die gesamte Software 
\item Ein ENC28J60 Ethernet-Controller für das Senden und Empfangen von Ethernet Frames (MAC und PHY Ethernet Layer) ist über SPI mit dem ATmega32 verbunden 
\item Ein Ethernet RJ-45 MagJack TRJ 0011 BA NL von Trxcom mit eingebautem Übertrager und Anzeige-LEDs am ENC28J60
\item Ein MAX232 für die serielle Schnittstelle 
\item Zwei Spannungsregler, \SI{5}{V} und \SI{3.3}{V}
\item "Hühnerfutter" 
\end{itemize}

Fast alle I/O Pins des ATmega32 sind irgendwo auf Anschlüssen herausgeführt. Entweder auf dem SUB-D Stecker, dem EXT oder ISP Wannensteckern oder den blauen Anschlussklemmen. Eine Schutzbeschaltung gibt es nicht.

Die blauen Anschlussklemmen haben eine Nut und eine Feder mit denen man sie zusammenstecken kann, dadurch ist das Anlöten wesentlich leichter und sie stehen auch sauber in der Reihe.

\subsection{Softwareentwicklung für Mikrocontroller}

Die folgenden Abschnitte beschreiben grob die Programmiersprache 'C' und den generellen Programmaufbau für Mikrocontroller. Des Weiteren wird die zur Programmierung eingesetzt Toolkette erklärt.

\subsubsection{Programmiersprache C und Programmaufbau für $ \mu $C's}

C ist eine imperative Programmiersprache, die der Informatiker Dennis Ritchie in den frühen 1970er Jahren an den Bell Laboratories für die Systemprogrammierung des Betriebssystems Unix entwickelte. Seitdem ist sie auf vielen Computersystemen verbreitet.

Die Anwendungsbereiche von C sind sehr verschieden. Es wird zur System- und Anwendungsprogrammierung eingesetzt. Die grundlegenden Programme aller Unix-Systeme und die Systemkerne vieler Betriebssysteme sind in C programmiert. Zahlreiche Sprachen, wie C++, Objective-C, C\#, Java, PHP, Vala oder Perl orientieren sich an der Syntax und anderen Eigenschaften von C\footnote{Quelle: http://de.wikipedia.org/wiki/C\_(Programmiersprache)}.

Es bestehen zwei unterschiedliche Methoden, um ein Mikrocontroller-Programm zu schreiben, und zwar völlig unabhängig davon, in welcher Programmiersprache das Programm geschrieben wird.
\paragraph[Sequentieller Programmablauf]{Sequentieller Programmablauf\footnote{Quelle: http://www.mikrocontroller.net/attachment/36525/AtmelCprogramming.pdf}}

Bei dieser Programmiertechnik wird eine Endlosschleife programmiert, welche im Wesentlichen
immer den gleichen Aufbau hat:


 
\begin{figure}[ht]
	\centering
  \includegraphics[scale=1]{Bilder/seqprog.jpg}
	\caption{Sequentieller Programmablauf}
	\label{fig_seqprogab}
\end{figure}

\paragraph[Interruptgesteuerter Programmablauf]{Interruptgesteuerter Programmablauf\footnote{Quelle: http://www.mikrocontroller.net/attachment/36525/AtmelCprogramming.pdf}}
Bei dieser Methode werden beim Programmstart zuerst die gewünschten Interruptquellen aktiviert
und dann in eine Endlosschleife gegangen, in welcher Dinge erledigt werden können, welche nicht
zeitkritisch sind.

Wenn ein Interrupt ausgelöst wird so wird automatisch die zugeordnete Interruptfunktion
ausgeführt.

\begin{figure}[ht]
	\centering
  \includegraphics[scale=1]{Bilder/intprogab.jpg}
	\caption{Interruptgesteuerter Programmablauf}
	\label{fig_intprogab}
\end{figure}





\subsubsection[Toolchain]{Toolchain\footnote{Quelle: http://de.wikipedia.org/wiki/Toolchain}}
Als Toolchain (englisch für Werkzeugkette) wird in der Softwareentwicklung eine systematische Sammlung von Werkzeug-Programmen bezeichnet, welche zur Erzeugung eines Produktes (meist eines anderen Programmes oder eines System von Programmen) Verwendung findet. Die Bezeichnung erklärt sich damit, dass die Werkzeug-Programme in der Regel in Form einer Kette nacheinander eingesetzt werden.

Ein einfacher Werkzeugkasten für die Softwareentwicklung beinhaltet einen Texteditor für die Erstellung des Quelltextes, einen Compiler, einen Linker zum Erstellen der ausführbaren Programme sowie Bibliotheken zum Zugriff auf die öffentlichen Routinen des Betriebssystem und einen Debugger. Komplexere Produkte benötigen für ihre Erstellung einen größeren Werkzeugkasten, so wird für ein Videospiel auch ein Programm für die Erstellung von 3D-Modellen, Grafiken, Soundeffekten, Musik und Animationen benötigt.

\paragraph[Eclipse(IDE)]{Eclipse(IDE)\footnote{Quelle: http://de.wikipedia.org/wiki/Eclipse\_(IDE)}}
Eclipse (von englisch eclipse ‚Sonnenfinsternis‘, ‚Finsternis‘, ‚Verdunkelung‘) ist ein quelloffenes Programmierwerkzeug zur Entwicklung von Software verschiedenster Art. Ursprünglich wurde Eclipse als integrierte Entwicklungsumgebung für die Programmiersprache Java genutzt, aber mittlerweile wird es wegen seiner Erweiterbarkeit auch für viele andere Entwicklungsaufgaben eingesetzt. Für Eclipse gibt es eine Vielzahl sowohl quelloffener als auch kommerzieller Erweiterungen.

Eclipse ist eine IDE, die sich alleine nicht zur Programmierung von C/C++ eignet. Dafür gibt es dann das Eclipse-Plugin CDT (auch von ECLIPSE.ORG). Die CDT erweitert Eclipse mit der Möglichkeit, C/C++ zu programmieren. Das aber erstmal nur mit dem GCC. Um die Toolchain AVR-GCC (WINAVR) einzubinden, benötigt man noch ein weiteres Plugin (CDT AVRGCC oder auch CDT AVR Plugin). Es ist auch möglich, ohne die beiden letzt genannten Plugins zu arbeiten, dann sind die Einstellungen für den GCC an AVR-GCC anzupassen (unkomfortabler)\footnote{Quelle: http://www.mikrocontroller.net/articles/AVR\_Eclipse}.

\paragraph[WinAVR]{WinAVR\footnote{Quelle: http://de.wikipedia.org/wiki/WinAVR}}
WinAVR ist eine Distribution des Cross-Compilers avr-gcc zum Einsatz unter Windows. Die letzte Release erfolgte am 20. Januar 2010. Eine Fortsetzung des Projekts wurde Mitte 2011 angekündigt.

Neben dem Compiler für AVR-Mikrocontroller beinhaltete die Distribution eine komplette GNU-Toolchain mit binutils, AVR-LibC, gdb, Simulator, In-System-Programmer, make und weitere aus der Unix-Welt bekannte Tools und Werkzeuge wie find, grep, awk, sed, etc. sowie den auf Scintilla basierenden Programmier-Editor Programmer's Notepad. Je nach Version ist nicht nur ein C- und C++-Compiler enthalten, sondern auch ein Compiler für Objective-C und eine komplette AVR32-Entwicklungsumgebung.

\subsection{Datentransfer im GSM-Netz}
Die Folgenden Abschnitte beschreiben den für den Datentransfer ausgewählten Übertra- gungskanal, den Dienst zur Übertragung von Textnachrichten und einen Befehlssatz zur Steuerung von Modems.

\subsubsection[GSM]{GSM\footnote{Quelle: http://de.wikipedia.org/wiki/Global\_System\_for\_Mobile\_Communications}}
Das Global System for Mobile Communications (früher Groupe Spécial Mobile, GSM) ist ein Standard für volldigitale Mobilfunknetze, der hauptsächlich für Telefonie, aber auch für leitungsvermittelte und paketvermittelte Datenübertragung sowie Kurzmitteilungen (Short Messages) genutzt wird. Es ist der erste Standard der sogenannten zweiten Generation („2G“) als Nachfolger der analogen Systeme der ersten Generation (in Deutschland: A-Netz, B-Netz und C-Netz) und ist der weltweit am meisten verbreitete Mobilfunk-Standard.

GSM wurde mit dem Ziel geschaffen, ein mobiles Telefonsystem anzubieten, das Teilnehmern eine europaweite Mobilität erlaubte und mit ISDN oder herkömmlichen analogen Telefonnetzen kompatible Sprachdienste anbot.

In Deutschland ist GSM die technische Grundlage der D- und E-Netze. Hier wurde GSM 1992 eingeführt, was zur raschen Verbreitung von Mobiltelefonen in den 1990er-Jahren führte. Der Standard wird heute in 670 GSM-Mobilfunknetzen in rund 200 Ländern und Gebieten der Welt als Mobilfunkstandard genutzt; dies entspricht einem Anteil von etwa 78 Prozent aller Mobilfunkkunden. Es existieren später hinzugekommene Erweiterungen des Standards wie HSCSD, GPRS und EDGE zur schnelleren Datenübertragung. Zum Zutritt in die Netze stehen insgesamt ca. 1700 verschiedene Mobiltelefonmodelle zur Verfügung.

\subsubsection[SMS]{SMS\footnote{Quelle: http://de.wikipedia.org/wiki/Short\_Message\_Service}}
Short Message Service (engl. für „Kurznachrichtendienst“, Abk. SMS) ist ein Telekommunikationsdienst zur Übertragung von Textnachrichten, die meist Kurzmitteilungen oder ebenfalls SMS genannt werden. Er wurde zuerst für den GSM-Mobilfunk entwickelt und ist in verschiedenen Ländern auch im Festnetz als Festnetz-SMS verfügbar. Über SMS-Gateways können weitere Dienste angebunden werden.

\paragraph{Übertragung}

Der SMS nutzt einen Signalisierungs-Kanal des GSM-Standards wie etwa SDCCH (Stand-alone Dedicated Control Channel) oder FACCH (Fast Associated Control Channel). Diese Kanäle werden auch genutzt, um Gespräche aufzubauen und zu halten. Kurzmitteilungen kann man parallel zu einer Telefonverbindung versenden/empfangen. Hierzu wird ein Teil der Bandbreite des Verkehrsdatenkanals temporär zum Signalisierungskanal (SACCH) umkonfiguriert und zum Versand/Empfang einer Kurzmitteilung genutzt.

Der Versand einer solchen Nachricht erfolgt grundsätzlich vom Mobiltelefon an eine Kurzmitteilungszentrale (SMSC), gewöhnlich die des Netzbetreibers; sie wird nicht von einem Mobiltelefon direkt zu einem anderen gesendet. Die Nummer der Kurzmitteilungszentrale hat den gleichen Aufbau wie eine „normale“ Mobilfunknummer (MSISDN = Mobile Subscriber Integrated Services Digital Network Number) und ist in den Einstellungen des Mobilfunkgeräts hinterlegt. Die Kurzmitteilungszentrale liest aus dem Header unter anderem die Zielnummer aus und sendet die Nachricht entweder im eigenen Netz an diese Zielnummer oder übergibt sie an den Netzbetreiber der Zielnummer. Die verschiedenen Netzbetreiber sind untereinander verbunden (interkonnektiert). Ist der Empfänger kein Mobilfunkgerät, sondern eine Anwendung (zum Beispiel im Fall einer Anmeldung bei einem Short-Message-Newsletter-Service), wird der Inhalt der Nachricht über Datenverbindungen an die Server des Service-Anbieters weitergeleitet.

Die Beschränkung auf 160 Zeichen bei einer Kurzmitteilungen ergibt sich aus der maximalen Nutzdatenlänge des MAP (Mobile Application Part) des Signalisierungssystems Nummer 7. Dieses wird zur Übertragung der Kurzmitteilungen zwischen dem MSC und dem SMSC verwendet. Aufgrund einer maximalen MSU (Message Signal Unit)-Paketgröße von 272 Oktetten im Signalisierungssystem Nummer 7 ist die verfügbare Nutzdatenlänge auf 140 Oktette (140 Oktette = 140 zu je 8 bit = 1120 bit) beschränkt. Kurzmitteilungen können in verschiedenen Zeichenkodierungen übertragen werden, so beispielsweise in der in Mitteleuropa üblichen GSM-7-bit-Kodierung, mit der maximal 160 Zeichen (160·7 bit = 1120 bit) möglich sind; in 8-Bit-Kodierungen sind 140 Zeichen, in der 16-Bit-Kodierung nur 70 Zeichen möglich.

Die Verwendung auch nur eines 16-bit-Sonderzeichens ändert das Codierschema einer Kurzmitteilung und reduziert ihre (Teil-)Länge auf 70 Zeichen, was kostenrelevant sein kann.

Bei überlangen Kurzmitteilungen, sogenannten Multi-SMS (Concatenated SMS, Long SMS) werden längere Texte aufgeteilt und einzeln versendet und in der Regel jeder einzelne Teil als separate Kurzmitteilung abgerechnet. Der Empfänger (sofern dazu fähig) setzt die Teile dann wieder zu einem zusammenhängenden Text zusammen.

\paragraph{Aufbau einer Kurzmitteilung}
\label{par:sms_aufbau}

Eine Kurzmitteilung besteht aus zwei Teilen:

\begin{itemize}


\item \textbf{Header} (engl. für „[Brief-]Kopf“) Im Header werden verschiedene grundlegende Nachrichtenparameter angegeben, zum Beispiel Absendernummer, Kodierung (7 Bit, 8 Bit, 16 Bit), Zeichensatz, Empfängernummer etc.
\item \textbf{Body} (engl. für „Körper“) Er ist der eigentliche Nachrichteninhalt, welcher aus den Nutzdaten besteht, die übertragen und schließlich am Display angezeigt werden sollen. Die maximale Größe eines Bodys ist auf 1.120 Bit (= 160 Zeichen für Textnachrichten) begrenzt, jedoch gibt es die Möglichkeit, mehrere Nachrichten miteinander zu verknüpfen („concatenated SMS/Enhanced Message Service (EMS)“). 
\end{itemize} 
\subsubsection[AT-Befehlssatz]{AT-Befehlssatz\footnote{Quelle: http://de.wikipedia.org/wiki/AT-Befehlssatz}}

Unter AT-Befehlssatz versteht man einen Satz ursprünglich von der Firma Hayes Communications entwickelter und zum Quasi-Standard gewordener Befehle zum Konfigurieren und Parametrieren von Modems. Die Zeichen ''AT'' stehen dabei für ''attention'' und müssen vor jedem Befehl gesendet werden. Durch Ausmessen der Länge der einzelnen Bits wird damit die Übertragungsgeschwindigkeit der Schnittstelle automatisch ermittelt.

Das erste Modem mit diesem Befehlssatz wurde 1981 unter dem Namen Smartmodem 300 verkauft.

Ein Gerät, das den AT-Befehlssatz beherrscht, wird auch als Hayes-kompatibel bezeichnet. Teilweise wurde dieser Befehlssatz von der ITU-T in die Empfehlung V.25ter umgesetzt; der heutige Name ist V.250. Der Einsatz dieses Standards macht den Einsatz von gerätespezifischen Modemtreibern entbehrlich.

Unter Windows kommt bis Version 3.x ein nativer Standardtreiber des Betriebssystems zum Einsatz, der unter Verwendung des AT-Befehlssatzes das Modem steuert. Allerdings werden seit Windows 95 üblicherweise gerätespezifische Gerätetreiber verwendet, sodass eine „Hayes-kompatibilität“ unter Windows nicht mehr nötig ist und deshalb in einigen Modems nicht mehr implementiert wird. Dies kann den Einsatz unter anderen Betriebssystemen erschweren oder sogar ausschließen, sofern kein spezieller Treiber zur Verfügung steht.








